[sources/path] Support leading slash in glob patterns
authorBehnam Esfahbod <behnam@zwnj.org>
Mon, 7 Aug 2017 19:48:12 +0000 (12:48 -0700)
committerBehnam Esfahbod <behnam@zwnj.org>
Mon, 7 Aug 2017 19:57:48 +0000 (12:57 -0700)
commit5641cbde4b21fc4c2e39d484448f0d35b3ca4bc0
treea044625a0fae93ad26945dd8336073ac794f95b8
parent37d12a5a8729d908268473fcabefe61c813ed639
[sources/path] Support leading slash in glob patterns

Background: https://github.com/rust-lang/cargo/issues/4268

This diff takes us to **Stage 1.1** of the migration plan by allowing
glob patterns to include a leading slash, so that glob patterns can be
updated, if needed, to start with a slash, closer to the future behavior
with gitignore-like matching.

Why is this stage needed?

It's common to have `package.include` set like this:
```
include = ["src/**"]
```
In old interpretation, this would only include all files under the `src`
directory under the package root. With the new interpretation, this
would match any path with some directory called `src`, even if it's not
directly under the package root.

After this patch, package owners can start marking glob patters with a
leading slash to fix the warning thrown, if any.

One thing to notice here is that there are no extra matchings, but, if
a manifest has already a pattern with a leading slash, this would
silently start matching it with the paths. I believe this is fine, since
the old behavior would have been for the pattern to not match anything,
therefore the item was useless.

See also <https://github.com/rust-lang/cargo/issues/4377> for suggestion
to throw warning on useless/invalid patterns in these fields.
src/cargo/sources/path.rs
tests/package.rs